#!/usr/bin/env python
# -*- coding: utf-8 -*-

'Django settings for labman2 project.'

DEBUG = True
TEMPLATE_DEBUG = DEBUG
#ALLOWED_HOSTS = ['127.0.0.1', 'localhost',]

import os
from os.path import join, abspath, dirname, sep

PROJECT_ROOT = abspath(join(dirname(__file__), "."))

def root(*x):
    "Absolute path to a subdir of the project"
    return abspath(join(PROJECT_ROOT, *x))

def get_env(var_name):
    "Read an ENV variable, e.g. password"
    try:
        return os.environ[var_name]
    except KeyError:
        print("Environment variable '%s' is not set, cannot continue." %
              var_name)
        raise

ADMINS = [
    # ('Your Name', 'your_email@example.com'),
]
ADMINS += (get_env("LABMAN2_ADMIN_NAME"), get_env("LABMAN2_ADMIN_EMAIL"))

MANAGERS = ADMINS

DATABASES = {
    'default': {
      #Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
      'ENGINE': 'django.db.backends.postgresql_psycopg2',
      'NAME': 'labman2',          # Or path to database file if using sqlite3.
      'USER': 'www',              # Not used with sqlite3.
#      'PASSWORD': 'Y5t2KUII',             # Not used with sqlite3.
      'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
      'PORT': '', # Set to empty string for default. Not used with sqlite3.
      #'OPTIONS': {'autocommit': True}, # Needed for tests with psycopg2 v.2.4.2
    }
}
DATABASES['default']['PASSWORD'] = get_env("LABMAN2_DB_PASSWD")

#New in Django 1.6.
#Default:False,
#ATOMIC_REQUESTS = True # wrap each HTTP request in a transaction
                       # on this database

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
#TIME_ZONE = 'America/Chicago'
#TIME_ZONE = None
TIME_ZONE = 'Europe/Helsinki'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

LANGUAGES = (
    ('en', (u'English')),
    ('fi', (u'Suomi')),
    ('ru', (u'Русский')),
#    ('sv', (u'Svenska')),
)

#SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True

#django 1.4
# If you set this to False, Django will not use timezone-aware datetimes.
#USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = root('uploads')

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/uploads/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
#for Svetlana
#STATIC_ROOT = 'C:/Users/Svetlana/labman2/labman2/static/'
#for Vova
STATIC_ROOT = root('static')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

#STATIC_DOC_ROOT = '/home/chu/progs/labman2/labman2/static'
STATIC_DOC_ROOT = STATIC_ROOT

LOGIN_URL = '/accounts/login/'

#The URL where requests are redirected after login
LOGIN_REDIRECT_URL = '/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
#SECRET_KEY = 'qgpjbmj(vup)e5s4oy*-f(84o-04ck%pxvbpi3hj^w%%41%d@-'
SECRET_KEY = get_env("LABMAN2_SECRET_KEY")

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.transaction.TransactionMiddleware', is deprecated
    #and replaced by ATOMIC_REQUESTS
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'labman2.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'labman2.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or
    # "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

SUBDIRS = [name[0].split(sep)[-1]
           for name in os.walk(abspath(join("labman2", "data", "subdata")))
           if name[0].split(sep)[-1] not in ('sql', 'subdata')]


# django-registration from
# http://www.bitbucket.org/ubernostrum/django-registration/

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
#    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
#    'registration',
    'labman2',
    'labman2.data',
    'labman2.data.subdata',
    'allauth',
    ]

INSTALLED_APPS.extend(['labman2.data.subdata.%s' % name for name in SUBDIRS])

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
         'require_debug_false': {
             '()': 'django.utils.log.RequireDebugFalse'
         }
     },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'console': {
            # logging handler that outputs log messages to terminal
            'class': 'logging.StreamHandler',
            'level': 'DEBUG', # message level to be written to console
        },
    },
    'loggers': {
    '': {
            'handlers': ['mail_admins', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },

        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

# Tests for registration need the following.
ACCOUNT_ACTIVATION_DAYS = 3
